package list;

import org.junit.Test;

import java.util.*;

public class ListAPI {
    /**
     * List集合
     * Collection顶级集合接口【容器】----List集合【子接口】
     * List集合存储数据：存储有序并且重复的元素
     * List集合---接口---无法直接串讲对象   需要用多态创建List集合
     * 实现类：
     * ArrayList：【常用：List与ArrayList的方法完全一致】实现数组
     * LinkedList： 双向链接实现
     * Vector：JDK1.0版本   性能：增删效率慢，线程安全  ---ArrayList
     * 重点：掌握List接口集合中所有方法
     */


    /**
     * get(int  index)  返回值：E --理解：Object
     * 作用：获取给定下标处的元素，从零开始
     */
@Test
    public  void  testGet(){
    //List集合--  多态创建
    List<String> l=new ArrayList<>();
    l.add("喜喜");l.add("呵呵");l.add("哈哈");
    System.out.println(l);
    //获取到：List集合中元素 哈哈
    String  str=l.get(2);
    System.out.println(str);
    for(int i=0;i<l.size();i++){
        String s=l.get(i);
        System.out.println(s);
    }
}

    /**
     * Set(int index,E  e)  返回值：e
     *作用：将给定元素设置到指定的下标位置处
     */



@Test
    public  void testSet(){
    List<String> l=new ArrayList<>();
    l.add("喜喜");l.add("哈哈");l.add("呵呵");
    //需求：List集合中元素中”哈哈“修改为”你好“
    l.set(1,"你好");
    System.out.println("修改后集合"+l);
}
/**
 * List集合继承Collection【重载：拓展功能】
 * add（int  index，E e）  返回值：void
 * 作用：将指定元素插入指定位置
 * remove（int index）  返回值：E
 * 作用：将给定位置的元素从集合中删除
 *
 * 查询快，增删慢--选择List/ArrayList
 */
@Test
    public  void test(){
    //创建List集合 ---重写方法add（）  重载方法add（下标，“元素”）
    List<String> l=new ArrayList<>();
    l.add("喜喜");l.add("哈哈");l.add("呵呵");
    System.out.println();
    l.add(2,"你好");
    System.out.println();
    l.remove(2);
    System.out.println();


}
/**
 * List集合
 * subList(int  start,int  end)   返回值：List <E>
 * 作用：截取范围内子集   口诀：含头不含尾
 */
@Test
    public   void  testSubList(){
    //创建集合  ：10个元素
    List<Integer> list=new ArrayList<>();
    for (int i=0;i<10;i++){
        list.add(i);
    }
    System.out.println("输出集合"+list);

    //获取子集3-8
    List<Integer> list1=list.subList(3,9);
    System.out.println(list1);
     for (int i=0;i<list1.size();i++){
         list1.set(i,list1.get(i)*10);
     }
}


/**
 * 集合排序
 * Random 伪随机数类  包位置：Java.util
 * newtInt() 返回一个伪随机整数【范围：0-数值】
 * Collections 集合工具类 静态方法：sort
 * sort（）方法：针对集合元素是数值进行排序【默认：升序】返回值：List
 * 需求：随机生成10个元素【整数：100之内】的集合---对集合排序
 * sort（集合，Comparator）  重载功能：拓展排序的功能
 * 集合：排序集合
 * Comparator比较器：指定规则--【定规则：按照字符串长短排序】
 * 重写：Compare（）---定义比较规则，默认自带交换功能
 */
@Test
    public void testArrayList(){
    //创建List集合 整数
    List<Integer> c=new ArrayList<>();
    //创建伪随机数
    Random r=new Random();
    for(int i=0;i<10;i++){
        c.add(r.nextInt(100));//100以内
    }
    System.out.println(c);
    //对List集合进行排序  Collection.sort(集合)

    System.out.println("排序后的集合"+c);

}
/**
 * 需求：创建集合，存汉字，排序---能排【没规则】
 */

@Test
    public  void  testComparator  () {
    //创建集合---存汉字
    List<String> c = new ArrayList<>();
    c.add("喜喜");
    c.add("哈哈");
    c.add("呵呵");
    //比较器规则定义：按照字符串长度进行排序
    //Comparator比较器接口--创建一次对象--采用匿名内部类
    Comparator<String> c1 = new Comparator<String>() {
        // Comparator方法：针对集合【自定义】排序
        //参数1：泛型：Object 01  集合中假设第一【交换】 个元素
        //参数2：泛型：Object 02 集合中假设第二【交换】 个元素
        public int compare(String o1, String o2) {


            /**
             * 返回值大于0     3-2交换   2-1交换
             * 小于零
             * 等于零   2-2 不动
             */

            return o2.length() - o1.length();
        }
    };


    Collections.sort(c, c1);
    System.out.println("排序后的集合：" + c);
}
}




























